package DAOMySQL;

import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

// Estructura y usuario de la base al final.
public class Database {
    private String url = "jdbc:mysql://localhost:3306"; // <ip> y <puerto> servidor
    private String model = "ventas"; //base de datos  --->>> cambiar nombre
    private String usuario = "root"; //usuario
    private String password = "1234"; //contraseña
    private java.sql.Connection conexion = null;
    private java.sql.Statement st = null;
    private java.sql.ResultSet rs = null;
    /**
     * Constructor de la clase database
     */
    public Database(){
        this.realizarTest();
    }
    
    
    /**
     * Retorta un ResultSet con los resultados de la Query.
     * @param query
     * @return 
     */
    public ResultSet query(String query){
        rs = null;
        try{
            st = conexion.createStatement();
            rs = st.executeQuery(query);
        }catch(Exception e){
            e.printStackTrace();
        }
        return rs;
    }
    /**
     * Ejecuta una sentencia SQL de INSERT, UPDATE o DELETE
     * @param query 
     */
    public void queryDML(String query){
        try{
            st = conexion.createStatement();
            st.executeUpdate(query);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * Realiza una serie de test de conexión a la DBMS.
     */
    private void realizarTest(){
        Boolean checkOk = true;
        System.out.print("Revisando JDBC Driver: ");
        if(this.probarDriver()){
            System.out.println("OK");
        }else{
            System.out.println("FAIL");
            checkOk = false;
        }
        System.out.print("Revisando conexión a DBMS: ");
        if(this.probarConexion()){
            System.out.println("OK");
        }else{
            System.out.println("FAIL");
            checkOk = false;
        }
        if(checkOk){
            System.out.println("Conexión exitosa!");
        }else{
            System.out.println("La conexión ha fallado.\n\n");
        }
    }
    /**
    * Prueba la conexión a la DBMS.
    * @return 
    */
    private Boolean probarConexion(){
        try{
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            conexion = DriverManager.getConnection(url+"/"+model,usuario,password);
            conexion.close();
            return true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
    /**
     * Abre la conexión con la DBMS.
     * @return 
     */
    public Boolean abrirConexion(){
        try{
            conexion = (Connection) DriverManager.getConnection(url+"/"+model,usuario,password);
            return true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
    /**
     * Cierra la conexión con la DBMS.
     * @return 
     */
    public Boolean cerrarConexion(){
        try{
            conexion.close();
            return true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
    /**
     * Prueba el correcto funcionamiento del JDBC Driver.
     * @return 
     */
    private Boolean probarDriver(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            return true;
        }catch(Exception e){
            e.printStackTrace();
        }
        return false;
    }
}
